home *** CD-ROM | disk | FTP | other *** search
- package com.sun.java.swing;
-
- import com.sun.java.accessibility.Accessible;
- import com.sun.java.accessibility.AccessibleContext;
- import com.sun.java.swing.border.Border;
- import com.sun.java.swing.event.ChangeEvent;
- import com.sun.java.swing.event.ChangeListener;
- import com.sun.java.swing.event.EventListenerList;
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.Insets;
- import java.awt.LayoutManager;
- import java.awt.Point;
- import java.awt.Rectangle;
- import java.awt.event.ComponentListener;
-
- public class JViewport extends JComponent implements Accessible {
- protected boolean isViewSizeSet = false;
- protected Point lastPaintPosition = null;
- protected boolean backingStore = false;
- protected transient Image backingStoreImage = null;
- protected boolean scrollUnderway = false;
- private ComponentListener viewListener = null;
- private transient ChangeEvent changeEvent = null;
- static Class class$com$sun$java$swing$event$ChangeListener;
-
- public JViewport() {
- ((Container)this).setLayout(this.createLayoutManager());
- }
-
- public void addChangeListener(ChangeListener l) {
- EventListenerList var10000 = super.listenerList;
- Class var10001 = class$com$sun$java$swing$event$ChangeListener;
- if (var10001 == null) {
- try {
- var10001 = Class.forName("com.sun.java.swing.event.ChangeListener");
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
-
- class$com$sun$java$swing$event$ChangeListener = var10001;
- }
-
- var10000.add(var10001, l);
- }
-
- protected void addImpl(Component child, Object constraints, int index) {
- this.setView(child);
- }
-
- protected boolean computeBlit(int dx, int dy, Point blitFrom, Point blitTo, Dimension blitSize, Rectangle blitPaint) {
- int dxAbs = Math.abs(dx);
- int dyAbs = Math.abs(dy);
- Dimension extentSize = this.getExtentSize();
- if (dx == 0 && dy != 0 && dyAbs < extentSize.height) {
- if (dy < 0) {
- blitFrom.y = -dy;
- blitTo.y = 0;
- blitPaint.y = extentSize.height + dy;
- } else {
- blitFrom.y = 0;
- blitTo.y = dy;
- blitPaint.y = 0;
- }
-
- blitPaint.x = blitFrom.x = blitTo.x = 0;
- blitSize.width = extentSize.width;
- blitSize.height = extentSize.height - dyAbs;
- blitPaint.width = extentSize.width;
- blitPaint.height = dyAbs;
- return true;
- } else if (dy == 0 && dx != 0 && dxAbs < extentSize.width) {
- if (dx < 0) {
- blitFrom.x = -dx;
- blitTo.x = 0;
- blitPaint.x = extentSize.width + dx;
- } else {
- blitFrom.x = 0;
- blitTo.x = dx;
- blitPaint.x = 0;
- }
-
- blitPaint.y = blitFrom.y = blitTo.y = 0;
- blitSize.width = extentSize.width - dxAbs;
- blitSize.height = extentSize.height;
- blitPaint.y = 0;
- blitPaint.width = dxAbs;
- blitPaint.height = extentSize.height;
- return true;
- } else {
- return false;
- }
- }
-
- protected LayoutManager createLayoutManager() {
- return new ViewportLayout();
- }
-
- protected ViewListener createViewListener() {
- return new ViewListener(this);
- }
-
- protected void fireStateChanged() {
- Object[] listeners = super.listenerList.getListenerList();
-
- for(int i = listeners.length - 2; i >= 0; i -= 2) {
- Object var10000 = listeners[i];
- Class var10001 = class$com$sun$java$swing$event$ChangeListener;
- if (var10001 == null) {
- try {
- var10001 = Class.forName("com.sun.java.swing.event.ChangeListener");
- } catch (ClassNotFoundException var3) {
- throw new NoClassDefFoundError(((Throwable)var3).getMessage());
- }
-
- class$com$sun$java$swing$event$ChangeListener = var10001;
- }
-
- if (var10000 == var10001) {
- if (this.changeEvent == null) {
- this.changeEvent = new ChangeEvent(this);
- }
-
- ((ChangeListener)listeners[i + 1]).stateChanged(this.changeEvent);
- }
- }
-
- }
-
- public AccessibleContext getAccessibleContext() {
- if (super.accessibleContext == null) {
- super.accessibleContext = new AccessibleJViewport(this);
- }
-
- return super.accessibleContext;
- }
-
- private Graphics getBackingStoreGraphics(Graphics g) {
- Graphics bsg = this.backingStoreImage.getGraphics();
- bsg.setColor(g.getColor());
- bsg.setFont(g.getFont());
- bsg.setClip(g.getClipBounds());
- return bsg;
- }
-
- public Dimension getExtentSize() {
- return ((Component)this).getSize();
- }
-
- public final Insets getInsets() {
- return new Insets(0, 0, 0, 0);
- }
-
- public Component getView() {
- return ((Container)this).getComponentCount() > 0 ? ((Container)this).getComponent(0) : null;
- }
-
- private Point getViewLocation() {
- Component view = this.getView();
- return view != null ? view.getLocation() : new Point(0, 0);
- }
-
- public Point getViewPosition() {
- Component view = this.getView();
- if (view != null) {
- Point p = view.getLocation();
- p.x = -p.x;
- p.y = -p.y;
- return p;
- } else {
- return new Point(0, 0);
- }
- }
-
- public Rectangle getViewRect() {
- return new Rectangle(this.getViewPosition(), this.getExtentSize());
- }
-
- public Dimension getViewSize() {
- Component view = this.getView();
- if (view == null) {
- return new Dimension(0, 0);
- } else {
- return this.isViewSizeSet ? view.getSize() : view.getPreferredSize();
- }
- }
-
- public boolean isBackingStoreEnabled() {
- return this.backingStore;
- }
-
- public boolean isOptimizedDrawingEnabled() {
- return false;
- }
-
- public void paint(Graphics g) {
- int width = ((JComponent)this).getWidth();
- int height = ((JComponent)this).getHeight();
- if (width != 0 && height != 0) {
- if (!this.backingStore) {
- super.paint(g);
- this.lastPaintPosition = this.getViewLocation();
- } else {
- if (this.backingStoreImage == null) {
- this.backingStoreImage = ((Component)this).createImage(width, height);
- this.paintViaBackingStore(g);
- } else if (this.scrollUnderway && !this.lastPaintPosition.equals(this.getViewLocation())) {
- Point blitFrom = new Point();
- Point blitTo = new Point();
- Dimension blitSize = new Dimension();
- Rectangle blitPaint = new Rectangle();
- Point newLocation = this.getViewLocation();
- int dx = newLocation.x - this.lastPaintPosition.x;
- int dy = newLocation.y - this.lastPaintPosition.y;
- boolean canBlit = this.computeBlit(dx, dy, blitFrom, blitTo, blitSize, blitPaint);
- if (!canBlit) {
- this.paintViaBackingStore(g);
- } else {
- int bdx = blitTo.x - blitFrom.x;
- int bdy = blitTo.y - blitFrom.y;
- Graphics bsg = this.getBackingStoreGraphics(g);
- bsg.copyArea(blitFrom.x, blitFrom.y, blitSize.width, blitSize.height, bdx, bdy);
- Rectangle r = this.getView().getBounds().intersection(blitPaint);
- bsg.setClip(r);
- super.paint(bsg);
- g.drawImage(this.backingStoreImage, 0, 0, this);
- }
- } else {
- this.paintViaBackingStore(g);
- }
-
- this.lastPaintPosition = this.getViewLocation();
- this.scrollUnderway = false;
- }
- }
- }
-
- private void paintViaBackingStore(Graphics g) {
- Graphics bsg = this.getBackingStoreGraphics(g);
- super.paint(bsg);
- g.drawImage(this.backingStoreImage, 0, 0, this);
- }
-
- private int positionAdjustment(int parentWidth, int childWidth, int childAt) {
- if (childAt >= 0 && childWidth + childAt <= parentWidth) {
- return 0;
- } else if (childAt <= 0 && childWidth + childAt >= parentWidth) {
- return 0;
- } else if (childAt > 0 && childWidth <= parentWidth) {
- return -childAt + parentWidth - childWidth;
- } else if (childAt >= 0 && childWidth >= parentWidth) {
- return -childAt;
- } else if (childAt <= 0 && childWidth <= parentWidth) {
- return -childAt;
- } else {
- return childAt < 0 && childWidth >= parentWidth ? -childAt + parentWidth - childWidth : 0;
- }
- }
-
- public void remove(Component child) {
- child.removeComponentListener(this.viewListener);
- super.remove(child);
- }
-
- public void removeChangeListener(ChangeListener l) {
- EventListenerList var10000 = super.listenerList;
- Class var10001 = class$com$sun$java$swing$event$ChangeListener;
- if (var10001 == null) {
- try {
- var10001 = Class.forName("com.sun.java.swing.event.ChangeListener");
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
-
- class$com$sun$java$swing$event$ChangeListener = var10001;
- }
-
- var10000.remove(var10001, l);
- }
-
- public void repaint(long tm, int x, int y, int w, int h) {
- Container parent = ((Component)this).getParent();
- if (parent != null) {
- ((Component)parent).repaint(tm, x + ((JComponent)this).getX(), y + ((JComponent)this).getY(), w, h);
- } else {
- super.repaint(tm, x, y, w, h);
- }
-
- }
-
- public void scrollRectToVisible(Rectangle contentRect) {
- Component view = this.getView();
- if (view != null) {
- int dx = 0;
- int dy = 0;
- Rectangle bounds = ((Component)this).getBounds();
- dx = this.positionAdjustment(bounds.width, contentRect.width, contentRect.x);
- dy = this.positionAdjustment(bounds.height, contentRect.height, contentRect.y);
- if (dx != 0 || dy != 0) {
- Point viewPosition = this.getViewPosition();
- this.setViewPosition(new Point(viewPosition.x - dx, viewPosition.y - dy));
- this.scrollUnderway = false;
- }
-
- }
- }
-
- public void setBackingStoreEnabled(boolean x) {
- this.backingStore = x;
- }
-
- public final void setBorder(Border border) {
- if (border != null) {
- throw new IllegalArgumentException("JViewport.setBorder() not supported");
- }
- }
-
- public void setBounds(int x, int y, int w, int h) {
- Dimension size = ((Component)this).getSize();
- if (size.width != w || size.height != h) {
- this.backingStoreImage = null;
- }
-
- super.setBounds(x, y, w, h);
- }
-
- public void setExtentSize(Dimension newExtent) {
- Dimension oldExtent = this.getExtentSize();
- if (!newExtent.equals(oldExtent)) {
- ((Component)this).setSize(newExtent);
- this.fireStateChanged();
- }
-
- }
-
- public void setView(Component view) {
- int n = ((Container)this).getComponentCount();
-
- for(int i = n - 1; i >= 0; --i) {
- ((Container)this).remove(i);
- }
-
- this.isViewSizeSet = false;
- if (view != null) {
- super.addImpl(view, (Object)null, -1);
- this.viewListener = this.createViewListener();
- view.addComponentListener(this.viewListener);
- }
-
- }
-
- public void setViewPosition(Point p) {
- Component view = this.getView();
- if (view != null) {
- p = new Point(-p.x, -p.y);
- if (!p.equals(view.getLocation())) {
- this.scrollUnderway = true;
- view.setLocation(p);
- this.fireStateChanged();
- }
- }
-
- }
-
- public void setViewSize(Dimension newSize) {
- Component view = this.getView();
- if (view != null) {
- Dimension oldSize = view.getSize();
- if (!newSize.equals(oldSize)) {
- view.setSize(newSize);
- this.isViewSizeSet = true;
- this.fireStateChanged();
- }
- }
-
- }
-
- public Dimension toViewCoordinates(Dimension size) {
- return new Dimension(size);
- }
-
- public Point toViewCoordinates(Point p) {
- return new Point(p);
- }
- }
-